objective c有優秀又好用的PrefixHeaderPrefixHeader的功用就是可以
存放一些全域變數 給任何Class呼叫使用
也可以使用來宣告APP所需到的文件
方便又好用 但轉變好Swift
似乎因為Class與Class之間變得開放
使得PrefixHeader沒有跟著過來
想使用的話 網路上只有找到混編譯
但我實在沒辦法接受語言不一致
那我們來試試看手刻一個自己的PrefixHeader
順便寫BaseController
PrefixHeader基本上放的全域變數
都是固定的參數 為了要簡化程式碼的長度
優化程式的可識別度 把一些常用攏長的語法
放置於PrefixHeader方便呼叫
也可以將APP色系統一設置於PrefixHeader
這樣如果要更換顏色風格或當作樣版的化
快速更換加速開發 讚讚
PrefixHeader
基本使用 可以使用#define宣告
#define KScreenWidth ([[UIScreen mainScreen] bounds].size.width)
#define KScreenHeight [[UIScreen mainScreen] bounds].size.height
#define kScreenBounds [UIScreen mainScreen].bounds
other class
其他class就可以不用宣告直接使用該變數
NSLog(@"%f",KScreenWidth);
NSLog(@"%f",KScreenHeight);
PrefixHeader
也可以帶入參數
來查看該變數是否為空質
#define ValidNull(f) (f!=nil && [f isKindOfClass:[NSNull class]])
other class
這樣可以以防一些api回傳空質時
造成APP閃退
credits = ValidNull(credits)?@"0":credits;
目標在Swift上 做到這兩點
就可以滿足現階段需求
首先建立一個PrefixHeader.swift
設置一些常用的public let變數
PrefixHeader
import Foundation
import UIKit
public let KScreenWidth: CGFloat = UIScreen.main.bounds.size.width
public let KScreenHeight: CGFloat = UIScreen.main.bounds.size.height
public let kScreenBounds: CGRect = UIScreen.main.bounds
other class
print(KScreenWidth)
print(KScreenHeight)
print(kScreenBounds)
至於回傳值我打算寫個public func
應該就可以達成第二的目標
PrefixHeader
public func ValidInt(value: Any) -> Bool {return value is Int}
other class
if ValidInt(value:1) {
    print("yes")
}else{
    print("no")
}
輕鬆就完成兩項目標
當然要添加什麼自己決定
以上都可以換成自己想要的
BaseController應該是許多人都會運用到的
可以先在BaseController寫好所需的功能
在給需要的Class繼承
就可以無痛使用父類別功能
我這邊習慣在viewDidLoad分別執行
依序執行func 讓viewDidload更整齊一點
也不會太多程式碼集中在同一個位置
BaseViewController
首先創建一個Swift檔
類別選擇UIViewController
接著在viewDidload新增以上三個func
import UIKit
class JGBaseViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        // 1、初始化變量
        self.initIMVariables()
        // 2、UI創建
        self.initIMUI()
        // 3、加載數據
        self.initIMData()
    }
    /**
     * 初始化變量
     */
    func initIMVariables() {
    }
    /**
     * UI創建
     */
    func initIMUI() {
    }
    
    /**
     * 加載數據
     */
    func initIMData() {
    }
}
*** 子類別Class ***
子類別Class 記得先要繼承 BaseController
別且使用override func添加剛剛三個父類別func
class Test2ViewController: JGBaseViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    // MARK: - 供子類重寫
    /**
     * 初始化變量
     */
    override func initIMVariables() {
        super.initIMVariables()
        print("初始化變量")
    }
    
    /**
     * UI創建
     */
    override func initIMUI() {
        super.initIMUI()
        print("UI創建")
    }
    
    /**
     * 加載數據
     */
    override func initIMData() {
        super.initIMData()
        print("加載數據")
    }
}
在子類別viewDidLoad時就會順序
執行三個func到時候就可以依類別
填入適當的程式碼在func就可以了
** 執行結果 **
初始化變量
UI創建
加載數據